package com.ncui.wisdomLearn.common.utils;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * Redis登录工具类
 * @author Lvlele
 */
@Component
@RequiredArgsConstructor
public class RedisLoginUtils {
    
    private final RedisFacade redisFacade;
    
    private static final String LOGIN_FAIL_PREFIX = "login:fail:count:";
    private static final long MAX_FAIL_COUNT = 10;
    private static final long LOCK_TIME = 24;
    
    /**
     * 获取登录失败次数
     *
     * @param key 用户标识（可以是用户ID或邮箱）
     * @return 失败次数
     */
    public long getLoginFailCount(String key) {
        String redisKey = LOGIN_FAIL_PREFIX + key;
        Object count = redisFacade.get(redisKey);
        return count == null ? 0 : Long.parseLong(count.toString());
    }
    
    /**
     * 增加登录失败次数
     *
     * @param key 用户标识（可以是用户ID或邮箱）
     * @return 当前失败次数
     */
    public long incrementLoginFailCount(String key) {
        String redisKey = LOGIN_FAIL_PREFIX + key;
        long count = redisFacade.increment(redisKey, 1);
        // 设置24小时过期
        if (count == 1) {
            redisFacade.expire(redisKey, LOCK_TIME, TimeUnit.HOURS);
        }
        return count;
    }
    
    /**
     * 清除登录失败次数
     *
     * @param key 用户标识（可以是用户ID或邮箱）
     */
    public void clearLoginFailCount(String key) {
        String redisKey = LOGIN_FAIL_PREFIX + key;
        redisFacade.delete(redisKey);
    }
    
    /**
     * 检查是否超过最大失败次数
     *
     * @param key 用户标识（可以是用户ID或邮箱）
     * @return true:已超过限制 false:未超过限制
     */
    public boolean isExceedMaxFailCount(String key) {
        return getLoginFailCount(key) >= MAX_FAIL_COUNT;
    }
} 